package reflect;

import java.util.ArrayList;

public class ReflectDemo03 {
    public static void main(String[] args) throws Exception {
        /*
         * 使用反射创建对象
         * - Class.newInstance() 方法
         *  - 目标类型一定包含无参构造器! 否则出现异常
         */
        //创建ArrayList类型的对象
        //1.获取Class对象
        Class cls = ArrayList.class;
        //2.调用newInstance方法 ，返回Object类型的引用
        //可能出现异常:1.没有无参构造器  2.构造器执行错误
        Object obj = cls.newInstance();
        System.out.println(obj);
        //使用反射创建  自定义类对象
        //1. 获取Class对象
        //2. 使用反射API
        //动态加载类型  “reflect.Worker”
        Class cls1 =  Class.forName("reflect.Person");
        //创建对象
        Object obj1 = cls1.newInstance();
        //测试创建的对象
        System.out.println(obj1);

        //使用硬编码创建对象
        Worker worker = new Worker();
        System.out.println(worker);
        /*
         * 使用反射动态创建对象和硬编码创建对象的区别
         * 反射创建对象：可以根据一个动态的类名创建对象，如果类名换了
         * 就可以创建新类型的对象   性能稍差!
         * 硬编码创建的对象:必须知道类名，根据类名创建对象
         * 创建的对象类型是固定不变的
         */

    }
}
